package com.ygqh.baby.service;

import java.util.Date;
import java.util.List;

import com.ygqh.baby.ao.QueryInfo;
import com.ygqh.baby.ao.ResultSet;
import com.ygqh.baby.model.YgChannelBalance;
import com.ygqh.baby.po.YgChannel;
import com.ygqh.baby.po.YgChannelCategory;
import com.ygqh.baby.po.YgUser;
import com.ygqh.baby.po.YgUserOpen;

public interface YgChannelService {

	List<YgChannel> find();

	int findCount();

	YgChannel findById(Long id);

	int deleteSoft(Long[] ids);

	int deleteSoft(Long id);

	/**
	 * 创建渠道，时为渠道创建用户
	 * 
	 * @param ygChannel
	 * @return
	 */
	int save(YgChannel ygChannel);

	int update(YgChannel ygChannel);

	int saveOrUpdate(YgChannel ygChannel);

	int saveChannelCategory(YgChannelCategory category);

	int updateChannelCategory(YgChannelCategory category);

	int deleteSoftChannelCategory(Long[] categoryIds);

	/**
	 * 判断该渠道是否存在
	 * 
	 * @param categoryId
	 * @param categoryName
	 * @return
	 */
	Boolean isExistCategory(Long categoryId, String categoryName);

	/**
	 * 获取渠道列表
	 * 
	 * @param queryInfo
	 * @param categoryId
	 * @param source
	 * @param q
	 * @return
	 */
	ResultSet<YgChannel> search(QueryInfo queryInfo, Long categoryId, String sourceCode, String q);

	/**
	 * 根据parentId 获取子渠道数据(含扫描统计，返利统计)
	 * 
	 * @param parentId
	 * @return
	 */
	List<YgChannel> findChannelDetailByParent(Long parentId);

	/**
	 * 获取渠道分类列表
	 * 
	 * @param queryInfo
	 * @param q
	 * @return
	 */
	ResultSet<YgChannelCategory> searchChannelCategory(QueryInfo queryInfo, String q);

	/**
	 * 获取所有渠道分类
	 * 
	 * @return
	 */
	List<YgChannelCategory> findAllChannelCategory();

	/**
	 * 判断sourceCode是否存在
	 * 
	 * @param channelId
	 * @param sourceCode
	 * @return
	 */
	Boolean isExist(Long channelId, String sourceCode);

	/**
	 * 根据渠道code获取渠道信息
	 * 
	 * @param sourceCode
	 * @return
	 */
	YgChannel findByCode(String sourceCode);

	/**
	 * 根据parentId 查询所有子渠道（包含主渠道本身）
	 * 
	 * @param parentId
	 * @return
	 */
	List<YgChannel> findByParentId(Long parentId);

	/**
	 * 查找sourceCode列表，如果不是领导则返回空集合
	 * 
	 * @param userId
	 * @return
	 */
	List<String> findSourceCodeWithParent(Long userId);

	/**
	 * 统计渠道扫码数量
	 * 
	 * @param startDate
	 * @param endDate
	 *           
	 * 
	 * @return
	 */
	List<YgUserOpen> findChannelScanAmount(Date startDate, Date endDate);

	/**
	 * 统计渠道新用户注册数量
	 *
	 * @param startDate
	 * @param endDate
	 *            
	 * @return
	 */
	List<YgUser> findChannelRegAmount(Date startDate, Date endDate);

	/**
	 * 批量更新渠道的扫码数和新增用户数
	 * 
	 * @param channelList
	 * @return
	 */
	int updateScanAmountBatch(List<YgChannel> channelList);
	int updateStatus(YgChannel ygChannel);
	List<YgChannel> findAllParentChannel();

	void executeChannelScanAndRegTask(Date startDate, Date endDate);

	/**
	 * 查找所有子渠道
	 * @return
	 */
    List<YgChannelBalance> findAllChildChannel();

	YgChannelBalance findChannelBalanceByParentId(Long parentId);
}
